package com.xxxx.server.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xxxx.server.pojo.Admin;
import com.xxxx.server.pojo.MenuRole;
import com.xxxx.server.mapper.MenuRoleMapper;
import com.xxxx.server.pojo.RespBean;
import com.xxxx.server.service.IMenuRoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author huyelin
 * @since 2022-01-12
 */
@Service
public class MenuRoleServiceImpl extends ServiceImpl<MenuRoleMapper, MenuRole> implements IMenuRoleService {
    @Autowired
    private MenuRoleMapper menuRoleMapper;
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;
    /**
     * 更新角色菜单
     * @param rid
     * @param mids
     * @return
     * 思想：
     *  每次在更新之前，根据角色id，把所有关联的菜单id进行清空。
     *  在根据前端传来的  角色id  和 菜单id 进行关联起来。
     */
    @Override
    //事务的注解
    @Transactional
    public RespBean updateMenuRole(Integer rid, Integer[] mids) {
        //1.删除该角色在数据库中。 就是删除t_role表中的 rid= 11 也就是删除test 123456
        menuRoleMapper.delete(new QueryWrapper<MenuRole>().eq("rid",rid));

        /*  删除该角色在redis中，所对应的菜单。
         rid= r_role: 相对于的是修改用户的名字。并不是菜单名字。所以我认为的是错误的。
        this.redisTemplate.delete("menu_"+rid);
                     -----再次修改后：------
        Integer adminId = ((Admin) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId();
        redisTemplate.delete("menu_" + adminId);
        */

        //2.添加菜单： 1.0个权限
        if(null == mids || 0==mids.length){
            return RespBean.success("更新成功");
        }
        //2.添加菜单  2.大于0个权限：   进行批量更新
        Integer integer = menuRoleMapper.insertRecord(rid, mids);
        if(integer == mids.length){
            return RespBean.success("更新成功");
        }
        return RespBean.error("更新失败");
    }
}
